package utils


import (
	"io/ioutil"
	"os"
	"path/filepath"
	"strings"
	"fmt"
	"regexp"
	"io"
)

type FileUtil struct{

}

//获取指定目录下的,匹配正则表达式的所有文件
//`^jdk-([\w]+)-linux-x64.rpm`
func (this *FileUtil) ListDir(dirPth string, reg_exp string) (files []string,filenames []string, err error) {
	files = []string{}
	filenames = []string{}

	dir, err := ioutil.ReadDir(dirPth)
	if err != nil {
		return nil, nil,err
	}

	PthSep := string(os.PathSeparator)

	for _, fi := range dir {
		fmt.Println(fi.Name())
		if fi.IsDir() { // 忽略目录
			continue
		}
		isMatch,err := regexp.Match(reg_exp,[]byte(fi.Name()))
		CheckErr(err)
		if isMatch { //匹配文件
			files = append(files, dirPth+PthSep+fi.Name())
			filenames = append(filenames,fi.Name())
		}
	}

	return files, filenames,nil
}

//获取指定目录及所有子目录下的所有文件，可以匹配后缀过滤。
func (this *FileUtil) WalkDir(dirPth, substring string) (files []string, err error) {
	files = []string{}
	substring = strings.ToUpper(substring) //忽略后缀匹配的大小写

	err = filepath.Walk(dirPth, func(filename string, fi os.FileInfo, err error) error { //遍历目录
		//if err != nil { //忽略错误,继续便利
		// return err
		//}

		if fi.IsDir() { // 忽略目录
			return nil
		}

		if strings.Contains(strings.ToUpper(fi.Name()), substring) {
			files = append(files, filename)
		}

		return nil
	})

	return files, err
}

//copyfile
func (this *FileUtil) CopyFile (src ,des string) int64{
	srcFile, err := os.Open(src)
	CheckErr(err)
	defer srcFile.Close()

	desFile, err := os.Create(des)
	CheckErr(err)
	defer desFile.Close()

	w ,_ := io.Copy(desFile, srcFile)
	return w
}

//写文件内容到指定的文件
func (this *FileUtil) WriteFile( content []byte,file string){
	fout,err := os.Create(file)
	defer fout.Close()
	CheckErr(err)
	fout.Write(content)
}